package com.scala.sys

object HelloScala {

  //定义一个方法
  //方法m2参数要求是一个函数，函数的参数必须是两个Int类型
  //返回值类型也是Int类型
  def m1(f: (Int, Int) => Int): Int = {
    f(2, 6)
  }

  //定义一个函数f1，参数是两个Int类型，返回值是一个Int类型
  val f1 = (x: Int, y: Int) => x + y
  //再定义一个函数f2
  val f2 = (m: Int, n: Int) => m * n

  def main(args: Array[String]) {
    //调用m1方法，并传入f1函数
    /*val r1 = m1(f1)
    println(r1)
    //调用m1方法，并传入f2函数
    val r2 = m1(f2)
    println(r2)*/

    /*val arr = Array(3, 2, 5, 1, 6, 4, 7)
    val sarr  = arr.sorted
    for (i <- (0 until sarr.length)) {
      println(sarr(i) + "  " + i)
    }*/
    /*val arr2 = arr.filter(x => x % 2 == 0).map(x => x * 10)
    arr2.map(println)
    println("arr中的最大值为： " + arr.max)*/

    /*val map = Map("语文" -> 90, "数学" -> 95, "英语" -> 92)
    println(map)
    val map2 = Map(("物理", 93), ("生物", 95), ("化学", 90))
    map2 ++= map
    println(map2)
    println(map2("物理"))
    map2("物理") = 97
    //如果找到映射，就返回映射值，没有映射就返回默认值
    println(map2.getOrElse("物理", -1))*/

    //统计单词出现的次数
    val lines = List("这段 代码 是完成 单词 统计", "这段 代码 牛逼吗",
      "这段 这段 这段 代码 代码 是完成 是完成 单词")
    println(lines.flatMap(_.split(" ")).map((_, 1))
      .groupBy(_._1).map(item => (item._1, item._2.size)).toList.sortBy(_._2).reverse)
  }

  def forTest(): Unit = {
    /*
    //最简单的for循环
    for (i <- 2 to 10)
      println(i)*/

    /*
    //遍历集合
    val arr = Array("aaa", "bbb", "ccc");
    for (i <- arr)
      println(i)*/


    /*
     //for推导式：如果for循环的循环体以yield开始，则该循环会构建出一个集合
    //每次迭代生成集合中的一个值
    val v = for (i <- 1 to 10) yield i * 10
    println(v)*/

    /*//对循环的值加判断
    for (i <- 1 to 10; if i % 2 == 0)
      println(i)*/

    /*//多重for循环
    for (i <- 1 to 2; j <- 1 to 3) {
      println("i= " + i + " j= " + j)
    }*/


  }
}
